Analyzing Distributed Traces To Find Performance Bottlenecks